package com.koron.car.web.applycar.service;

import com.koron.bean.workflow.RedirectQuery;
import com.koron.car.web.applycar.bean.entity.DriverRecord;
import com.koron.car.web.applycar.bean.query.CarApplyQuery;
import com.koron.car.web.applycar.bean.vo.CarApplyVO;
import org.koron.ebs.mybatis.SessionFactory;

import java.util.List;

/**
 * (CarApply)表服务接口
 *
 * @author twcao
 * @since 2022-03-09 10:37:07
 */
public interface CarApplyService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    CarApplyVO queryById(SessionFactory factory, String id);

    /**
     * 新增数据
     *
     * @param apply 实例对象
     * @return 实例对象
     */
    CarApplyVO insert(SessionFactory factory, CarApplyVO apply);

    /**
     * 修改数据
     *
     * @param apply 实例对象
     * @return 实例对象
     */
    CarApplyVO update(SessionFactory factory, CarApplyVO apply);

    /**
     * 提交申请
     * @param factory
     * @param applyId
     * @return
     */
    CarApplyVO submit(SessionFactory factory, String applyId);

    /**
     * 通过主键删除数据
     * @param applyId 主键
     * @return 是否成功
     */
    boolean deleteById(SessionFactory factory, String applyId);

    /**
     * 用车申请查询条件
     * @param factory
     * @param query
     * @return
     */
    List<CarApplyVO> queryList(SessionFactory factory, CarApplyQuery query);

    /**
     * 用车申请查询条件
     * @param factory
     * @param query
     * @return
     */
    List<CarApplyVO> queryApplyList(SessionFactory factory, CarApplyQuery query);

    /**
     * 车辆和司机调度
     * @param factory
     * @param apply
     * @return
     */
    boolean dispatch(SessionFactory factory, CarApplyVO apply);

    /**
     * 申请完成
     * @param factory
     * @param apply
     * @return
     */
    boolean finish(SessionFactory factory, CarApplyVO apply);

    /**
     * 工作流更新
     * @param factory
     * @param redirectQuery
     */
    Boolean workflowUpdate(SessionFactory factory, RedirectQuery redirectQuery);

    /**
     * 审核完成
     * @param factory
     * @param detail
     * @return
     */
    CarApplyVO auditFinish(SessionFactory factory, CarApplyVO detail);

    /**
     * 根据车牌号或车辆id查询申请信息
     * @param factory
     * @param licPlateNum
     * @param carId
     * @return
     */
    List<CarApplyVO> scanCar(SessionFactory factory, String licPlateNum, String carId);

    /**
     * 根据车辆申请id和当前登录用户查询申请记录
     * @param factory
     * @param applyId
     * @return
     */
    DriverRecord getDrivingRecord(SessionFactory factory, String applyId);

    /**
     * 发送短信
     * @param phone
     * @param messageContent
     * @return
     */
    int sendPhoneMessage(String phone,String messageContent);
}
